#include "ReaderManager.h"
#include <iostream>
const string ReaderManager::DATA_FILE = "/home/lfm/code/cppstudy/BookManagement/readers.dat";

// 构造函数，初始化时从文件加载读者信息
ReaderManager::ReaderManager()
{
    loadFromFile();
}

// 添加新读者，如果账户已存在则不添加
void ReaderManager::addReader(const Reader &reader)
{
    if (findReader(reader.getAccount()))
    {
        return; // 账户已存在
    }
    readers.push_back(reader);
    saveToFile();
}

// 根据账户删除读者信息，删除成功返回 true，否则返回 false
bool ReaderManager::deleteReader(const string &account)
{
    for (auto it = readers.begin(); it != readers.end(); ++it)
    {
        if (it->getAccount() == account)
        {
            readers.erase(it);
            saveToFile();
            return true;
        }
    }
    return false;
}

// 根据账户修改读者的密码，修改成功返回 true，否则返回 false
bool ReaderManager::modifyReader(const string &account, const string &newPassword)
{
    Reader *reader = findReader(account);
    if (reader)
    {
        reader->setPassword(newPassword);
        saveToFile();
        return true;
    }
    return false;
}

// 根据账户查找读者，找到返回读者指针，否则返回 nullptr
Reader *ReaderManager::findReader(const string &account)
{
    for (auto &reader : readers)
    {
        if (reader.getAccount() == account)
        {
            return &reader;
        }
    }
    return nullptr;
}

// 显示所有读者的信息
void ReaderManager::displayReaders() const
{
    // system("clear");
    cout << "------------------- 读者列表 -------------------" << endl;
    if (readers.empty())
    {
        cout << "没有读者信息" << endl;
        return;
    }
    for (const auto &reader : readers)
    {
        cout << "账号: " << reader.getAccount()
             << "\t密码: " << reader.getPassword() << endl;
    }
    cout << "----------------------------------------------" << endl;
    // system("pause");
}

// void ReaderManager::saveToFile() const
// {
//     ofstream file(DATA_FILE, ios::out);
//     if (file.is_open())
//     {
//         for (const auto &reader : readers)
//         {
//             // 保存账号、密码、借阅记录数量、所有ISBN
//             file << reader.getAccount() << " " << reader.getPassword()
//                  << " " << reader.borrowedBooks.size();
//             for (const auto &isbn : reader.borrowedBooks)
//             {
//                 file << " " << isbn;
//             }
//             file << endl;
//         }
//         file.close();
//     }
// }
void ReaderManager::saveToFile() const
{
    ofstream file(DATA_FILE, ios::out);
    if (file.is_open())
    {
        for (const auto &reader : readers)
        {
            // 修改后保存格式：账号 密码 记录数 [ISBN 借书时间 应还时间]...
            file << reader.getAccount() << " " << reader.getPassword()
                 << " " << reader.borrowBooks.size(); // 原借阅数量保持不变

            // 修改遍历方式：每个记录保存三个字段
            for (const auto &record : reader.borrowBooks) // 原 isbn 改为 record
            {
                file << " " << record.isbn       // ISBN保持原样
                     << " " << record.borrowTime // 新增借书时间戳
                     << " " << record.dueTime;   // 新增应还时间戳
            }
            file << endl;
        }
        file.close();
    }
}

// // 从文件加载读者信息，包括账号、密码和借阅记录
// void ReaderManager::loadFromFile()
// {
//     readers.clear();
//     ifstream file(DATA_FILE);
//     if (file.is_open())
//     {
//         string account, password;
//         int borrowCount;
//         string isbn;
//         while (file >> account >> password >> borrowCount)
//         { // 先读账号、密码、借阅数量
//             Reader reader(account, password);
//             for (int i = 0; i < borrowCount; ++i)
//             {
//                 file >> isbn; // 再读每个ISBN
//                 reader.borrowedBooks.push_back(isbn);
//             }
//             readers.push_back(reader); // 添加到读者列表
//         }
//         file.close();
//     }
// }

// 从文件加载读者信息，包括账号、密码和借阅记录
void ReaderManager::loadFromFile()
{
    readers.clear();
    ifstream file(DATA_FILE);
    if (file.is_open())
    {
        string account, password;
        int borrowCount;
        while (file >> account >> password >> borrowCount)
        {
            Reader reader(account, password);

            for (int i = 0; i < borrowCount; i++)
            {
                string isbn;
                time_t borrowTime, dueTime;
                file >> isbn >> borrowTime >> dueTime;
                reader.borrowBooks.emplace_back(isbn, borrowTime, dueTime);
            }
            readers.push_back(reader);
        }
        file.close();
    }
}